﻿#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 创建者：zhaijc
 * 创建时间：2023/4/12 13:16:13
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MedianSocketService.Struct
{
    struct STLocTime
    {
        public uint uiLoTime;

        /// <summary>
        /// uiLoTime = (uint)((uiLoTime & ~0x3F) | (value & 0x3F)); 解释 其他同理
        /// 1、uiLoTime & ~0x3F 将 uiLoTime 的低 6 位（即二进制末 6 位）全部清零，得到一个只有高位的数；
        /// 2、(value & 0x3F) 取 value 的低 6 位，得到一个只有低位的数；
        /// 3、| 将这两个数合并起来，得到一个新的 32 位数，其中低 6 位是 value 的低 6 位，其他位是 uiLoTime 的高位。
        /// //
        /// </summary>
        public uint Seconds
        {
            get { return uiLoTime & 0x3F; }
            set { uiLoTime = (uint)(uiLoTime & ~0x3F | value & 0x3F); }
        }

        public uint Minutes
        {
            get { return uiLoTime >> 6 & 0x3F; }
            set { uiLoTime = (uint)(uiLoTime & ~(0x3F << 6) | (value & 0x3F) << 6); }
        }

        public uint Hours
        {
            get { return uiLoTime >> 12 & 0x1F; }
            set { uiLoTime = (uint)(uiLoTime & ~(0x1F << 12) | (value & 0x1F) << 12); }
        }

        public uint Day
        {
            get { return uiLoTime >> 17 & 0x1F; }
            set { uiLoTime = (uint)(uiLoTime & ~(0x1F << 17) | (value & 0x1F) << 17); }
        }

        public uint Month
        {
            get { return uiLoTime >> 22 & 0xF; }
            set { uiLoTime = (uint)(uiLoTime & ~(0xF << 22) | (value & 0xF) << 22); }
        }

        public uint Year
        {
            get { return uiLoTime >> 26 & 0x3F; }
            set { uiLoTime = uiLoTime & ~(0x3F << 26) | (value & 0x3F) << 26; }
        }
    }
}
